/*
 * IdFlota.h
 *
 *  Created on: 07/01/2010
 *      Author: San Martín, Matías I.
 */

#ifndef IDFLOTA_H_
#define IDFLOTA_H_

#include "../../Aplicacion/Common/Mensajes/MensajesCommonTypes.h"

#include "../Common/CommonTypes.h"

#include "IdJugador.h"

/**
 * Represeenta un identificador de flota dentro del sistema (local a un jugador)
 */
class IdFlota {

//------------------------------ CONSTANTES ------------------------------
public:
	static const T_ID_FLOTA ID_UNDEFINED = -1;
//------------------------------ ATRIBUTOS ------------------------------
private:
	T_ID_FLOTA _id;
	IdJugador _idContainer;

//------------------------------ METODOS ------------------------------
public:

	IdFlota() :
		_id(ID_UNDEFINED) {
	}

	IdFlota(T_ID_FLOTA id) :
		_id(id) {
	}

	IdFlota(T_ID_FLOTA id, const IdJugador& idContenedor)
		: _id(id),
		  _idContainer(idContenedor)
	{
	}

	virtual ~IdFlota(){}

	void setId(T_ID_FLOTA id) {
		_id = id;
	}

	void setIdJugador(const IdJugador& id) {
		_idContainer = id;
	}

	const IdJugador& getIdJugador() const {
		return _idContainer;
	}

	T_ID_FLOTA getId() const { return _id; }

	bool isDefined() {
		return _id != ID_UNDEFINED;
	}

	void saveToMensaje (T_ID_FLOTA& id,
						aplicacion::t_identificadorFuente& idJugador) const
	{
		id = _id;
		_idContainer.saveToMensaje(idJugador);
	}

	/**
	 * Carga la info del jugador y asocia el id de la flota
	 */
	void loadFromMensaje (T_ID_FLOTA id, const aplicacion::t_identificadorFuente& idJugador)
	{
		_id = id;
		_idContainer.loadFromMensaje(idJugador);
	}

	bool operator == (const IdFlota& otro) const
	{
		return _id == otro._id && _idContainer == otro._idContainer;
	}

private:
	friend std::ostream &operator<<( std::ostream &stream, const IdFlota &obj );
};

#endif /* IDFLOTA_H_ */
